#define _CRT_SECURE_NO_WARNINGS 1

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>

using namespace std;

//const int N = 101;
//int T;
//int a[N][N];
//
//int main()
//{
//    cin >> T;
//    while (T--)
//    {
//        int r, c;
//        cin >> r >> c;
//        for (int i = 1; i <= r; i++)
//        {
//            for (int j = 1; j <= c; j++)
//            {
//                scanf("%d", &a[i][j]);
//            }
//        }
//        for (int j = c; j > 0; j--)
//        {
//            for (int i = r; i > 0; i--)
//            {
//                int right = j + 1 <= c ?  a[i][j + 1] : 0;
//                int left = i + 1 <= r ? a[i + 1][j] : 0;
//                a[i][j] += max(left, right);
//            }
//        }
//        printf("%d\n", a[1][1]);
//    }
//    return 0;
//}


const int N = 1010;
int n;
int a[N], dp[N];

int main()
{
    scanf("%d", &n);
    for (int i = 1; i <= n; i++)
    {
        scanf("%d", &a[i]);
    }

    for (int i = 1; i <= n; i++)
    {
        dp[i] = 1;
        for (int j = 1; j < i; j++)
        {
            if (a[i] > a[j])
            {
                dp[i] = max(dp[i], dp[j] + 1);
            }
        }
    }
    int ans = 0;
    for (int i = 1; i <= n; i++)
    {
        if (dp[i] > ans)
        {
            ans = dp[i];
        }
    }
    printf("%d\n", ans);
    return 0;
}